package pe.com.bbva.ge.persistencia.orm.hibernate;

import java.util.List;

import org.hibernate.SessionFactory;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import pe.com.bbva.ge.domain.configuracion.Lista;
import pe.com.bbva.ge.domain.configuracion.Valor;
import pe.com.bbva.ge.domain.seguridad.Membresia;
import pe.com.bbva.ge.domain.seguridad.Rol;
import pe.com.bbva.ge.domain.seguridad.Usuario;
import pe.com.bbva.ge.persistencia.orm.SeguridadORM;
import pe.com.bbva.ge.persistencia.orm.hibernate.utileria.Busqueda;

@Repository
public class SeguridadORMHibernate extends BaseORMHibernate implements SeguridadORM {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 6594052911364578899L;

	@Autowired
	public SeguridadORMHibernate(SessionFactory sessionFactory) {
		super(sessionFactory);
	}

	@Override
	public Usuario obtenerUsuario(String registro) {
		Busqueda filtro = Busqueda.forClass(Usuario.class);
		filtro.add(Restrictions.eq("registro", registro));
		
		//agregarFiltroEstadoActivo(filtro);
		
		List<Usuario> usuarios = buscar(filtro);
		
		if(!usuarios.isEmpty())
		{
			return usuarios.get(0);
		}
		
		return null;
	}

	@Override
	public Rol verificarMembresia(String registro, String cargo) {
		
		Rol rol = obtenerRolMembresia(Valor.CODIGO.MEMBRESIA_TIPO_REGISTRO, registro);
		if(rol == null)
		{
			rol = obtenerRolMembresia(Valor.CODIGO.MEMBRESIA_TIPO_CARGO, cargo);
		}
		
		return rol;
	}
	
	private Rol obtenerRolMembresia(String tipo, String valor)
	{
		Busqueda filtro = Busqueda.forClass(Membresia.class);
		filtro.add(Restrictions.eq("valor", valor));
		filtro.createAlias("tipo", "t");
		filtro.add(Restrictions.eq("t.codigo", tipo));
		filtro.createAlias("t.lista", "l");
		filtro.add(Restrictions.eq("l.codigo", Lista.CODIGO.MEMBRESIA_TIPO));
		
		agregarFiltroEstadoActivo(filtro);
		
		List<Membresia> membresias = buscar(filtro);
		if(!membresias.isEmpty())
		{
			return membresias.get(0).getRol();
		}
		
		return null;
	}

	/*	@Override
	public Membresia obtenerMembresia(Usuario usuario) {
		List<Membresia> membresias = membresiaHibernate.buscar(obtenerFiltro(usuario.getRegistro(), Constante.VALOR.CODIGO.REGISTRO));
		if(membresias.size() == 0)
		{
			membresias = membresiaHibernate.buscar(obtenerFiltro(usuario.getCargo(), Constante.VALOR.CODIGO.CARGO));
		}
		Membresia membresia = null;
		if(membresias.size() != 0)
		{
			membresia = membresias.get(0);
		}
		return membresia;
	}
	
	private Busqueda obtenerFiltro(String valor, String tipo)
	{
		Busqueda filtro = Busqueda.forClass(Membresia.class);
		filtro.add(Restrictions.eq("valor", valor));
		filtro.createAlias("tipo", "t");
		filtro.add(Restrictions.eq("t.codigo", tipo));
		filtro.createAlias("estado", "e");
		filtro.add(Restrictions.eq("e.codigo", Constante.VALOR.CODIGO.ACTIVO));
		return filtro;
	}*/

}
